home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / wlib11_4.zip / HEADERS.EXE / MENU.H < prev    next >
Text File  |  1991-03-18  |  11KB  |  307 lines

  1. /*** MENU.H ***/
  2.  
  3. /* Written By P.A. McKenzie
  4.  * The C Window Library
  5.  * Copyright (C) 1990   All Rights Reserved
  6. */
  7. #if !defined (MENU_DEF)
  8. #define MENU_DEF  1
  9. #include "window.h"
  10. #include "bstring.h"
  11. #undef PROTO_DEF
  12. #include "proto.h"
  13.  
  14. #ifndef UNKNOWNARGS
  15. #ifndef __cplusplus
  16. #define UNKNOWNARGS
  17. #else
  18. #define UNKNOWNARGS ...
  19. #endif
  20. #endif
  21.  
  22. #if defined (MENU_GLOBAL_DEF)
  23. #define MENU_EXTERN
  24. #else
  25. #define MENU_EXTERN  extern
  26. #endif
  27.  
  28. /* define offsets for pop-up menu keys */
  29.  
  30. #define POPUP_UPKEY              0
  31. #define POPUP_DOWNKEY            1
  32. #define POPUP_ACCEPTKEY          2
  33. #define POPUP_QUITKEY            3
  34. #define POPUP_HOMEKEY            4
  35. #define POPUP_ENDKEY             5
  36. #define POPUP_RIGHTKEY           6
  37. #define POPUP_LEFTKEY            7
  38. #define POPUP_PULLDOWN_QUITKEY   8
  39.  
  40. #define NUMPOPUPKEYS     9
  41.  
  42. #define POPUP_EXIT          1
  43. #define BAR_EXIT            2
  44. #define PULLDOWN_EXIT       3
  45. #define PULLDOWN_POPUP_EXIT 4
  46. #define PULLDOWN_CONTINUE   5
  47.  
  48. /* define offsets for bar menu keys */
  49. #define BAR_RIGHTKEY           0
  50. #define BAR_LEFTKEY            1
  51. #define BAR_ACCEPTKEY          2
  52. #define BAR_QUITKEY            3
  53. #define BAR_HOMEKEY            4
  54. #define BAR_ENDKEY             5
  55.  
  56. #define NUMBARKEYS     6
  57.  
  58.  
  59. #define BARWRAP        1
  60. #define BARSTATIC      2
  61. #define BARCONFIRM     4
  62. #define BARDISPLAY     8
  63. #define BAROVERRIDE    16
  64. #define BARENHANCEDKEY 32
  65.  
  66. #define POPUPWRAP        1
  67. #define POPUPSTATIC      2
  68. #define POPUPCONFIRM     4
  69. #define POPUPDISPLAY     8
  70. #define POPUPOVERRIDE    16
  71. #define POPUPENHANCEDKEY 32
  72.  
  73. /**********  Popup return values for user-defined functions **********/
  74.  
  75. #define POPUP_CONTINUE      0
  76. #define POPUP_MOVE_UP       1
  77. #define POPUP_MOVE_DOWN     2
  78. #define POPUP_DO_CHOICE     3
  79. #define POPUP_MOVE_CONTINUE 4
  80. #define POPUP_ESCAPE        5
  81. #define POPUP_MOVE_LEFT     6
  82. #define POPUP_MOVE_RIGHT    7
  83. #define POPUP_MOVE_HOME     8
  84. #define POPUP_MOVE_END      9
  85. #define POPUP_PULLDOWN_QUIT 10
  86.  
  87. /**********  Bar return values for user-defined functions **********/
  88.  
  89. #define BAR_CONTINUE         0
  90. #define BAR_MOVE_RIGHT       1
  91. #define BAR_MOVE_LEFT        2
  92. #define BAR_DO_CHOICE        3
  93. #define BAR_MOVE_CONTINUE    4
  94. #define BAR_ESCAPE           5
  95. #define BAR_MOVE_HOME        6
  96. #define BAR_MOVE_END         7
  97.  
  98. #define MOVE_CONTINUE_DONE   -1
  99.  
  100. #define ENTRYCOLOR       0
  101. #define BORDERCOLOR      1
  102. #define HOTKEYCOLOR      2
  103. #define HIGHLIGHTCOLOR   3
  104. #define UNAVAILCOLOR     4
  105.  
  106. #define NUMPOPUPCOLORS 5
  107. #define NUMBARCOLORS   5
  108.  
  109. typedef struct
  110. {
  111.   unsigned int wrap_around:1;   /* menu highlight bar wrap */
  112.   unsigned int static_menu:1;   /* menu is displayed while performing
  113.                                  * function */
  114.   unsigned int confirm_flag:1;  /* confirmation function when hotkey is
  115.                                  * pressed */
  116.   unsigned int open_flag:1;     /* menu is activated ? */
  117.   unsigned int pulldown_flag:1; /* menu is part of pulldown system? */
  118.   unsigned int display_flag:1;  /* menu is displayed even after exiting? */
  119.   unsigned int override:1;      /* unavailable entries are still processed? */
  120.   unsigned int enhanced_key:1;  /* enhanced key flag */
  121.  
  122. } POPUP_MENU_STATUS, BAR_MENU_STATUS;
  123.  
  124.  
  125. typedef struct
  126. {
  127.   char *entry_name;
  128.   unsigned row;
  129.   char hotkey_letter;
  130.   unsigned int ext_hotkey;
  131.   int (*func)(UNKNOWNARGS);
  132. } POPUP_MENU_ENTRY;
  133.  
  134.  
  135. typedef struct popmenu
  136. {
  137.   WPOINTER w;
  138.   POPUP_MENU_ENTRY *menu_select;
  139.   unsigned menu_color[NUMPOPUPCOLORS];
  140.   unsigned menu_key[NUMPOPUPKEYS];
  141.   POPUP_MENU_STATUS popmenu_flags;
  142.   BITSTRING active_entry;
  143.   int pwidth;
  144.   unsigned last_entry;
  145.   int exp_method;
  146.   int (*confirm_func)(struct popmenu *, unsigned);
  147. } POPUP_MENU, *POPUP_MENU_PTR;
  148.  
  149.  
  150.  
  151. #define POPUP_WRAP_ON(p)              (p)->popmenu_flags.wrap_around
  152. #define POPUP_STATIC_ON(p)            (p)->popmenu_flags.static_menu
  153. #define POPUP_EXPLODE(p)              (p)->popmenu_flags.explode_flag
  154. #define POPUP_CONFIRM_ON(p)           (p)->popmenu_flags.confirm_flag
  155. #define POPUP_OPEN(p)                 (p)->popmenu_flags.open_flag
  156. #define POPUP_PULLDOWN_ON(p)          (p)->popmenu_flags.pulldown_flag
  157. #define POPUP_DISPLAY_ON(p)           (p)->popmenu_flags.display_flag
  158. #define POPUP_OVERRIDE_ON(p)          (p)->popmenu_flags.override
  159. #define POPUP_ENHANCED_ON(p)          (p)->popmenu_flags.enhanced_key
  160.  
  161. void menu_init();
  162.  
  163. typedef struct
  164. {
  165.   char *entry_name;
  166.   int row;
  167.   int col;
  168.   unsigned char hotkey_letter;
  169.   unsigned int ext_hotkey;
  170.   int (*func)(UNKNOWNARGS);
  171. } BAR_MENU_ENTRY;
  172.  
  173.  
  174.  
  175. typedef struct barmenu
  176. {
  177.   WPOINTER w;
  178.   BAR_MENU_ENTRY *menu_select;
  179.   unsigned menu_color[NUMBARCOLORS];
  180.   unsigned menu_key[NUMBARKEYS];
  181.   BAR_MENU_STATUS barmenu_flags;
  182.   BITSTRING active_entry;
  183.   int *width;
  184.   int exp_method;
  185.   unsigned last_entry;
  186.   int (*confirm_func)(struct barmenu *, unsigned);
  187. } BAR_MENU, *BAR_MENU_PTR;
  188.  
  189.  
  190.  
  191.  
  192.  
  193. #define BAR_WRAP_ON(b)              (b)->barmenu_flags.wrap_around
  194. #define BAR_STATIC_ON(b)            (b)->barmenu_flags.static_menu
  195. #define BAR_EXPLODE(b)              (b)->barmenu_flags.explode_flag
  196. #define BAR_CONFIRM_ON(b)           (b)->barmenu_flags.confirm_flag
  197. #define BAR_OPEN(b)                 (b)->barmenu_flags.open_flag
  198. #define BAR_DISPLAY_ON(b)           (b)->barmenu_flags.display_flag
  199. #define BAR_OVERRIDE_ON(b)          (b)->barmenu_flags.override
  200. #define BAR_PULLDOWN_ON(b)          (b)->barmenu_flags.pulldown_flag
  201. #define BAR_ENHANCED_ON(b)          (b)->barmenu_flags.enhanced_key
  202.  
  203.  
  204. typedef struct pullmenu
  205. {
  206.   BAR_MENU_PTR barmenu;
  207.   POPUP_MENU_PTR *popupmenu;
  208. }  PULLDOWN_MENU, *PULLDOWN_MENU_PTR;
  209.  
  210. PULLDOWN_MENU_PTR  CreatePulldownMenu();
  211. /* Up to here */
  212.  
  213. MENU_EXTERN int (*popup_undef_key) P((POPUP_MENU_PTR p, unsigned key,
  214.                                      unsigned *entry));
  215. MENU_EXTERN int (*bar_undef_key) P((BAR_MENU_PTR b, unsigned key,
  216.                                     unsigned *entry));
  217. MENU_EXTERN void (*global_bar_prefunc) P((BAR_MENU_PTR, unsigned));
  218. MENU_EXTERN void (*global_popup_prefunc) P((POPUP_MENU_PTR, unsigned));
  219.  
  220. MENU_EXTERN unsigned popup_key_definition[NUMPOPUPKEYS];
  221. MENU_EXTERN unsigned bar_key_definition[NUMBARKEYS];
  222.  
  223.  
  224. #if __cplusplus
  225.    extern "C"
  226.       {
  227. #endif
  228.  
  229. int               BarAssignColors P((BAR_MENU_PTR barptr, unsigned *colors));
  230. int               BarAssignKeys P((BAR_MENU_PTR barptr, unsigned *keys));
  231. int               BarChangeEntryString P((BAR_MENU_PTR barptr, unsigned entry,
  232.                                           char *string));
  233. BAR_MENU_PTR      BarCreateMenu P((BAR_MENU_ENTRY *entries, unsigned *colors,
  234.                                   int row, int col, WPOINTER (*wfunc)(void)));
  235.  
  236. int               BarMakeEntryAvailable P((BAR_MENU_PTR barptr, unsigned entry));
  237. int               BarMakeEntryUnavailable P((BAR_MENU_PTR barptr, unsigned entry));
  238. int               BarMenuFree P((BAR_MENU_PTR barptr));
  239. int               BarSetExplosionType P((BAR_MENU_PTR barptr, int effect));
  240. int               BarSetOptions P((BAR_MENU_PTR barptr, int options, int flag));
  241. int               BarSelectMenu P((BAR_MENU_PTR barptr, int rank,
  242.                                    unsigned entry));
  243. int               BarSetConfirmFunction P((BAR_MENU_PTR barptr,
  244.                                            int (*cfunc)(BAR_MENU_PTR, unsigned)));
  245.  
  246. int               PopupAssignColors P((POPUP_MENU_PTR popptr, unsigned *colors));
  247. int               PopupAssignKeys P((POPUP_MENU_PTR popptr, unsigned *keys));
  248.  
  249. POPUP_MENU_PTR    PopupCreateMenu P((POPUP_MENU_ENTRY *entries, unsigned *colors,
  250.                                      unsigned row, unsigned col, int wheight,
  251.                                      WPOINTER (*wfunc)(void),
  252.                                      VWPOINTER (*vwfunc)(void)));
  253.  
  254. int               PopupMakeEntryAvailable P((POPUP_MENU_PTR popptr,
  255.                                              unsigned entry));
  256. int               PopupMakeEntryUnavailable P((POPUP_MENU_PTR popptr,
  257.                                              unsigned entry));
  258.  
  259. int               PopupSelectMenu P((POPUP_MENU_PTR popptr, int rank,
  260.                                      unsigned entry));
  261. int               PopupSetOptions P((POPUP_MENU_PTR popptr, unsigned options,
  262.                                      int flag));
  263.  
  264. int               PopupChangeEntryString P((POPUP_MENU_PTR popptr,
  265.                                             unsigned entry, char *string));
  266. int               PopupSetExplosionType P((POPUP_MENU_PTR popptr, int effect));
  267.  
  268. int               PopupSetConfirmFunction P((POPUP_MENU_PTR popptr,
  269.                              int (*cfunc)(POPUP_MENU_PTR, unsigned)));
  270. int               PopupMenuFree P((POPUP_MENU_PTR popptr));
  271.  
  272. PULLDOWN_MENU_PTR PulldownCreateMenu P((POPUP_MENU_PTR popptrs[],
  273.                                         BAR_MENU_PTR barptr, int adjust));
  274.  
  275. int               PulldownSelectMenu P((PULLDOWN_MENU_PTR pullptr, int rankbar,
  276.                                         unsigned startbar, int *rankpop,
  277.                                         unsigned *startpop,
  278.                                         int imode));
  279.  
  280. int               PulldownMenuFree    P((PULLDOWN_MENU_PTR pullptr));
  281. int               PulldownMenuFreeAll P((PULLDOWN_MENU_PTR pullptr));
  282.  
  283. #if defined (SOURCE)
  284. #include "mintern.h"
  285. #endif
  286. #if __cplusplus
  287.   }
  288. #endif
  289. /* Other defines */
  290. #define       BAR_NULL_PTR      ((BAR_MENU_PTR)0)
  291. #define       POPUP_NULL_PTR    ((POPUP_MENU_PTR)0)
  292. #define       PULLDOWN_NULL_PTR ((PULLDOWN_MENU_PTR)0)
  293. #define       BAR_ENTRY_NULL    ((BAR_MENU_ENTRY *)0)
  294. #define       POPUP_ENTRY_NULL  ((POPUP_MENU_ENTRY *)0)
  295. #define       POPUP_STRING_IN_WINDOW(p,e)  \
  296.      (((p)->w->vwrow+(p)->w->height-1) > ((p)->menu_select[(e)-1].row) ? 1:0)
  297. #define       POPUP_ENTRY_AVAILABLE(p,e) (test_bit(&(p)->active_entry,(e)-1))
  298. #define       POPUP_WINDOW(p)            ((p)->w)
  299. #define       POPUP_VIRTUAL_WINDOW(p)    ((p)->w->vwptr)
  300. #define       POPUP_ENTRY_STRING(p,e)    ((p)->menu_select[(e)-1].entry_name)
  301. #define       POPUP_NUMBER_OF_ENTRIES(p) ((p)->active_entry.nbits)
  302. #define       BAR_ENTRY_AVAILABLE(b,e)   (POPUP_ENTRY_AVAILABLE((b),(e)))
  303. #define       BAR_WINDOW(b)              ((b)->w)
  304. #define       BAR_ENTRY_STRING(b,e)      ((b)->menu_select[(e)-1].entry_name)
  305. #define       BAR_NUMBER_OF_ENTRIES(b)   ((b)->active_entry.nbits)
  306. #endif
  307.